有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

无法使用Java运行linux命令

我正在使用ProcessBuilder在服务器上运行Linux命令:

ProcessBuilder pb = new ProcessBuilder("/usr/bin/printf %b", sendMessage,
                URL, " @serendipity | /usr/bin/perl /usr/local/bin/foo/bar -u nagios -s");

我正在尝试广播一条消息,该消息将通过管道传输到一个名为bar的寻呼系统。但是,在服务器上执行jar文件时,我经常会得到以下结果:

java.io.IOException: Cannot run program "/usr/bin/printf %b": error=2, No such file or directory
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
    at sms_serendipity.sms_serendipity.SmsSendMessage.sendMessage(SmsSendMessage.java:59)
    at sms_serendipity.sms_serendipity.SmsSendMessage.randomizeLinks(SmsSendMessage.java:48)
    at sms_serendipity.sms_serendipity.SmsParseWeb.regexHttp(SmsParseWeb.java:103)
    at sms_serendipity.sms_serendipity.SmsParseWeb.parseXML(SmsParseWeb.java:77)
    at sms_serendipity.sms_serendipity.SmsParseWeb.locateWebAudio(SmsParseWeb.java:44)
    at sms_serendipity.sms_serendipity.mainClass.main(mainClass.java:11)
Caused by: java.io.IOException: error=2, No such file or directory
    at java.lang.UNIXProcess.forkAndExec(Native Method)
    at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
    at java.lang.ProcessImpl.start(ProcessImpl.java:134)
    at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)
    ... 6 more

这是我第一次使用ProcessBuilder(我也尝试了Runtime.exec()。有人能告诉我如何纠正我试图运行的命令吗


共 (2) 个答案

  1. # 1 楼答案

    仔细阅读错误消息:您试图执行程序/usr/bin/printf %b,但该程序当然不存在

    该程序称为/usr/bin/printf

  2. # 2 楼答案

    我已经想出了一个办法让它工作。这需要一点实验,但这里是我所做的

        ProcessBuilder pb = new ProcessBuilder(
                "/bin/dash", 
                "-c",
                "/usr/bin/perl /usr/local/bin/foo/bar -u nagios -s " + sendMessage + URL + fooUser,
                "/bin/echo");
    

    我让它将标准输出记录到一个文本文件中,并确认广播正常